var express = require('express');
var app = express();
var router = require('./Router/index')
app.get('/login', (req, res) => {
  //req.query获取接口？后面附带的查询参数，以对象的格式返回
  res.send(req.query)
})
app.get('/system/:id/:name', (req, res) => {
  //req.params获取url中的动态参数，以对象的格式返回
  res.send(req.params)
})
//公开指定目录,可以在浏览器端直接访问public内部的静态资源,可以多次调用，第一个参数是挂载路径前缀
app.use('/public', express.static('./public'));
app.use('/public2', express.static('./public2'));
//挂载路由对象,app.use是用来注册全局中间件
app.use(router);

//全局注册中间件函数，
/*1.注意摆放位置，除错误级别中间件要放在所有路由之后，其他中间件必须放在所有路由之前
  2.next()后面不要再写代码，防止逻辑混乱
  3.多个中间件共享req，res
 */
const mx = function (req, res, next) {
  console.log('mx');
  //中间件之间共用一个req，res
  req.start = 'asasasas'
  next()
}
const m1 = function (req, res, next) {
  console.log('m1');
  //中间件之间共用一个req，res
  req.start = 'asasasas'
  next()
}
const m2 = function (req, res, next) {
  console.log('m2');
  //中间件之间共用一个req，res
  req.start = 'asasasas'
  next()
}
const m3 = function (req, res, next) {
  console.log('m3');
  //中间件之间共用一个req，res
  req.start = 'asasasas'
  next()
}
const m4 = function (req, res, next) {
  console.log('m4');
  //中间件之间共用一个req，res
  req.start = 'asasasas'
  next()
}
//多个中间件之间调用，以use的顺序为调用顺序
app.use(mx)
app.use(m2)
app.use(m1)

//局部中间件，就是不适用use的中间件
//路由的第二个参数就是局部路由的名称，表示此中间件只在当前路由生效,
//也可以m3,m4多个中间件，也可以用数组包起来
app.post('/submit', [m3, m4], (req, res) => {
  res.send(req.start)
})
//中间件函数
app.get('/d', (req, res, next) => {
  //把流转关系转到下一个中间件
  next()
})
app.post('/v', mx);

//中间件分类
/* 1.应用级，绑定到app实例上的，app.get()
   3.路由级，绑定到express.Router（）
   4.错误，错误中间件函数第一个参数err
   5.内置  express.static  / express.json（解析json格式，版本4.16.0+）直接use调用就行
   /express.urlencoded  （解析url-encoded，版本4.16.0+
   6.第三方中间件，需要npm下载
*/

app.listen(80, function () {
  console.log('server is running');
})